#ifndef TASK_QUEUE_H
#define TASK_QUEUE_H

#include "Task.h"
#include <iostream>
#include <queue>
#include <memory>
#include <mutex>
#include <condition_variable>

using std::condition_variable;
using std::cout;
using std::endl;
using std::mutex;
using std::queue;
using std::unique_lock;
using std::unique_ptr;

class TaskQueue
{
private:
    size_t _taskSize;
    queue<Task *> _tasks;

    mutex _mtx;
    condition_variable _cond;

public:
    TaskQueue(size_t size);
    ~TaskQueue();
    void addTask(Task *);
    Task *front();
    bool full();
};

#endif